package com.zhixi.pattern.notimportant.interpreterpattern;

import com.zhixi.pattern.notimportant.interpreterpattern.operation.Calculator;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

/**
 * 解释器模式
 *
 *  解释器模式在实际开发中用的非常少，因为它会引起效率问题、性能以及维护问题。
 *
 * @作者 ShuHaoNan
 * @邮箱 shuhaonan1@gmail.com
 * @时间 2020/11/20 14:14
 */
public class InterpreterPattern {

    /*
    *  请输入表达式
    *  a+b-c
    *  100
    *  20
    *  40
    *  运算结果为：a+b-c=80
    *
    *  */
    public static void main(String[] args) throws IOException {
        String expStr = getExpStr();
        Map<String, Integer> var = getValue(expStr);
        Calculator cal = new Calculator(expStr);
        System.out.println("运算结果为：" + expStr +  "=" + cal.run(var));
    }

    /**
     * 获得表达式
     */
    public static String getExpStr() throws IOException {
        System.out.println("请输入表达式：");
        return new BufferedReader(new InputStreamReader(System.in)).readLine();
    }

    /**
     * 获得映射值
     */
    public static Map<String, Integer> getValue(String exprStr) throws IOException {
        Map<String, Integer> map = new HashMap<>();
        for (char ch : exprStr.toCharArray()) {
            if (ch != '+' && ch != '-') {
                if (!map.containsKey(String.valueOf(ch))) {
                    String in = new BufferedReader(new InputStreamReader(System.in)).readLine();
                    map.put(String.valueOf(ch), Integer.valueOf(in));
                }
            }
        }
        return map;
    }

}
